export default {
  namespaced: true, // 加入命名空间，实际开发一定会设置它为true
  //   命名空间:作用：解决命名冲突
  // 原生js阶段出现的
  //  A let a=10     B  let a=20
  // 命名空间  let A={a:10,fn(){}} A.a    let B={a:20,fn(){}}   B.a
  state: {
    // 定义和以前一样
    // 天生自带命名空间
    username: '张三'
    // 访问:this.$store.state.user.username
    // mapState以前方式访问不到
  },
  mutations: {
    // 定义和以前一样
    setUsername (state, value) {
      // state=this.$store.state.user
      state.username = value
    }
    // 访问（了解就可以了，非命名空间下的访问）：调用和以前也一样 this.$store.commit('setUsername',实参)
    // 默认情况很容易产生命名冲突
    // 访问（namespaced: true）:this.$store.commit('模块名/方法名',实参)
    //                         this.$store.commit('user/setUsername',实参)
  },
  actions: {
    // 定义和以前一样
    refreshName (store) {
      // state:当前模块的state
      // rootState:根模块下的state,它可访问所有模块的state
      // getters:当前模块的getters
      // rootGetters:访问根模块的getters,它可以访问所有模块的getters
      // commit:
      //   访问当前模块的mutations:commit('方法名',实参)
      //   访问其它模块的mutations:commit('模块名/方法名',实参,{root:true})
      // dispatch:
      //   访问当前模块的actions:commit('方法名',实参)
      //   访问其它模块的actions:commit('模块名/方法名',实参,{root:true})
      console.log(store)
      setTimeout(() => {
        store.commit('setUsername', '王五')
        // 访问：other模块的mutations方法
        store.commit('other/testMutations', null, { root: true })
        // 调用当前模块的actions
        store.dispatch('userActions')
        // 调用其它模块的actions
        store.dispatch('other/testActions', null, { root: true })
      }, 2000)
    },
    userActions () {
      console.log('userActions')
    }
    // 访问（namespaced: true）：this.$store.dispatch('模块名/方法名',实参)
  },
  getters: {
    // 定义和以前一样
    getUserName (state, getters, rootState, rootGetters) {
      // state:当前模块的state
      // getters(了解):当前模块的getters
      // rootState(了解):根模块下的state  rootState====this.$store.state,它可以访问所有模块的state:rootState.模块名.属性名
      // rootGetters(了解)：根模块的getters  rootGetters===this.$store.getters ,它可以访问所有模块的getters：rootGetters['模块名/方法名']
      return (
        getters.test +
        state.username +
        '-------' +
        rootState.num +
        '---other模块的state:--' +
        rootState.other.otherInfo +
        '---访问other的getters---' +
        rootGetters['other/getOtherInfo']
      )
    },
    // 访问：this.$store.getters["模块名/方法名"]
    // 注意点： .语法后面的值要符合命名规范，如果不规范解决方式  [属性名]
    test () {
      return 'test姓名:'
    }
  }
}
